package org.jeecg.modules.wmhb.service;

import org.jeecg.modules.wmhb.entity.WmTaskBom;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.wmhb.entity.*;
import org.jeecg.modules.wmhb.vo.WmApplyBomVo;
import org.jeecg.modules.wmhb.vo.WmBuyVo;
import org.jeecg.modules.wmhb.vo.WmMaterialVo;
import org.jeecg.modules.wmhb.vo.WmOrderBomVo;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @Description: 任务BOM
 * @Author: jeecg-boot
 * @Date:   2024-08-31
 * @Version: V1.0
 */
public interface IWmTaskBomService extends IService<WmTaskBom> {
    /**
	 * 导入组件BOM  参数依次为导入的BOM， 导入的BOM父任务，设计任务
	 * @param bomNode
	 * @param wmTaskRoot 起点设计任务
	 */
	public WmTaskBom importComponentBom(BOMNode bomNode, WmTask wmTaskRoot);

	/**
	 * 导出报料单
	 * @param request
	 * @param taskbookType
	 * @param list
	 * @return
	 */
	public ModelAndView exportBomExcel(HttpServletRequest request, String taskbookType, List<WmTaskBom> list);

	/**
	 * 根据任务ID列表查找待报料和已报料的BOM列表
	 */
	public List<WmTaskBom> baoliaoListByWmTaskIds(List<String> idList);

	/**
	 * 根据任务ID查找未到货BOM列表
	 */
	public List<WmTaskBom> noArriveListByWmTaskId(String wmTaskId);

	/**
	 * 根据任务ID查找BOM
	 */
	public List<WmTaskBom> listByWmTaskId(String wmTaskId);

	/**
	 * 根据任务ID查找BOM
	 */
	public List<WmTaskBom> listByWmTaskIdAndVersion(String wmTaskId, String version);

	/**
	 * 更改采购申请数量（核减单）和报料时间
	 * @param wmApplyBomVo
	 */
	public void updatePurchaseNum(WmApplyBomVo wmApplyBomVo);

	/**
	 * 更新订货明细信息到BOM物料
	 * 更改采购到货数量到货时间和采购时间
	 * @param wmOrderBomVo
	 */
	public void updateOrderDetail(WmOrderBomVo wmOrderBomVo);

	/**
	 * 根据任务ID查找分组BOM
	 */
	public List<WmTaskBom> listGroupByWmTaskIds(List<String> idList);

	/**
	 * 根据任务ID查找BOM
	 */
	public List<WmTaskBom> listByWmTaskIds(List<String> idList);

	/**
	 * 领料生产
	 */
	public void consumeBom(String wmTaskId);

	/**
	 * 通过序号查询任务ID
	 */
	public String selectWmTaskIdBySeriesNo(String seriesNo);

	/**
	 * 查询所有已核减的物料
	 */
	public List<WmTaskBom> orderBomList();

	/**
	 * 更新任务BOM（当编辑或插入任务时）
	 */
	public void updateTaskbom(WmTask wmTaskRoot, WmTask wmTaskParent, WmTask wmTaskNew, WmTask wmTaskOriginal);

	/**
	 * 导入组件BOM  材料
	 * @param wmMaterialVoList
	 * @param wmTaskRoot 起点设计任务
	 */
	public List<WmTaskBom> importMaterialBom(List<WmMaterialVo> wmMaterialVoList, WmTask wmTaskRoot);

	/**
	 * 导入组件BOM  外购件
	 * @param wmBuyVoList
	 * @param wmTaskRoot 起点设计任务
	 */
	public List<WmTaskBom> importBuyBom(List<WmBuyVo> wmBuyVoList, WmTask wmTaskRoot);

	/**
	 * 通过序号查询任务BOM
	 */
	public WmTaskBom queryBySeriesNo(String seriesNo);

	/**
	 * 查询所有已核减的物料
	 */
	public List<WmTaskBom> queryByTaskAndVersion(WmTask wmTask, String itemType);

}
